其实有很多插件是可以实现 wordpress 远程图片本地化的,但是有可能插件太多了,会影响网站的性能或者拖累服务器,降低网站的运行速度。不过如果你是代码控,不喜欢用插件,那么下面这段“wordpress 远程图片自动本地化“的代码也许适合你,复制下面的代码,然后粘贴到你当前 WordPress 主题的模版函数(functions.php)文件中保存即可:
代码语言:javascript复制// 作者:全百科网// 网站:http://www.quanbaike.com/// 自动本地化外链图片add_filter('content_save_pre', 'auto_save_image');function auto_save_image($content) {$upload_path = '';$upload_url_path = get_bloginfo('url');//上传目录if (($var = get_option('upload_path')) !=''){$upload_path = $var;} else {$upload_path = 'wp-content/uploads';}if(get_option('uploads_use_yearmonth_folders')) {$upload_path .= '/'.date("Y",time()).'/'.date("m",time());}//文件地址if(($var = get_option('upload_url_path')) != '') {$upload_url_path = $var;} else {$upload_url_path = bloginfo('url');}if(get_option('uploads_use_yearmonth_folders')) {$upload_url_path .= '/'.date("Y",time()).'/'.date("m",time());}require_once ("../wp-includes/class-snoopy.php");$snoopy_Auto_Save_Image = new Snoopy;$img = array();//以文章的标题作为图片的标题if ( !empty( $_REQUEST['post_title'] ) )$post_title = wp_specialchars( stripslashes( $_REQUEST['post_title'] ));$text = stripslashes($content);if (get_magic_quotes_gpc()) $text = stripslashes($text);preg_match_all("/ src=(\"|\'){0,}(http:\/\/(.+?))(\"|\'|\s)/is",$text,$img);$img = array_unique(dhtmlspecialchars($img[2]));foreach ($img as $key => $value){set_time_limit(180); //每个图片最长允许下载时间,秒if(str_replace(get_bloginfo('url'),"",$value)==$value&&str_replace(get_bloginfo('home'),"",$value)==$value){//判断是否是本地图片,如果不是,则保存到服务器$fileext = substr(strrchr($value,'.'),1);$fileext = strtolower($fileext);if($fileext==""||strlen($fileext)>4)$fileext = "jpg";$savefiletype = array('jpg','gif','png','bmp');if (in_array($fileext, $savefiletype)){if($snoopy_Auto_Save_Image->fetch($value)){$get_file = $snoopy_Auto_Save_Image->results;}else{echo "error fetching file: ".$snoopy_Auto_Save_Image->error."";echo "error url: ".$value;die();}$filetime = time();$filepath = "/".$upload_path;//图片保存的路径目录!is_dir("..".$filepath) ? mkdirs("..".$filepath) : null;//$filename = date("His",$filetime).random(3);$filename = substr($value,strrpos($value,'/'),strrpos($value,'.')-strrpos($value,'/'));//$e = '../'.$filepath.$filename.'.'.$fileext;//if(!is_file($e)) {// copy(htmlspecialchars_decode($value),$e);//}$fp = @fopen("..".$filepath.$filename.".".$fileext,"w");@fwrite($fp,$get_file);fclose($fp);$wp_filetype = wp_check_filetype( $filename.".".$fileext, false );$type = $wp_filetype['type'];$post_id = (int)$_POST['temp_ID2'];$title = $post_title;$url = $upload_url_path.$filename.".".$fileext;$file = $_SERVER['DOCUMENT_ROOT'].$filepath.$filename.".".$fileext;//添加数据库记录$attachment = array('post_type' => 'attachment','post_mime_type' => $type,'guid' => $url,'post_parent' => $post_id,'post_title' => $title,'post_content' => '',);$id = wp_insert_attachment($attachment, $file, $post_parent);$text = str_replace($value,$url,$text); //替换文章里面的图片地址}}}$content = AddSlashes($text);remove_filter('content_save_pre', 'auto_save_image');return $content;}function mkdirs($dir){if(!is_dir($dir)){mkdirs(dirname($dir));mkdir($dir);}return ;}function dhtmlspecialchars($string) {if(is_array($string)) {foreach($string as $key => $val) {$string[$key] = dhtmlspecialchars($val);}}else{$string = str_replace('&', '&', $string);$string = str_replace('"', '"', $string);$string = str_replace('', $string);$string = preg_replace('/&(#\d;)/', '&\1', $string);}return $string;}以后你发表文章时就不用去管文章中的外链图片了,因为上面的代码会自动将文章中包含的外链图片自动保存到本地,是不是很方便的 wordpress 技巧呀。
好了,拿去试一试吧,我也不能保证在你那里能正常运行,不正常的请反馈,我这边是正常使用。